2022年2月16日水曜日

シェルコマンドなど

 シェルコマンドなど(主にbashが対象の話) 自分用メモ

"sudo apt update(upgrade)"  アップデート情報を得る (実際アップグレードする)
"tab"  1回押すと入力ワード補完. 絞り込めない時は2回目を押すと全候補を表示する
// カーソル移動
"Ctrl-b" 一文字分後退  "Ctr-f"  1文字分前進  "Ctr-a"  行頭に移動  "Ctr-e" 行末へ移動
"Alt-b","Alt-f" 単語移動
"Ctrl-w"  単語削除  "Ctrl-u" カーソルから行頭まで削除  "Ctrl-k" カーソルから行末まで削除
"Ct-h = backSpace" 1文字分後退かつ削除 "Ctrl-y"  直前に削除したのを張り付ける

// オプションの記法
 "cmd -opt 引数" ("cmd"はコマンド"opt"はオプションを表すとする)
オプションと引数の間のスペースは省略可能だが
--ロングオプションでは間に=かスペースが必要
"無印" オプションを指定せずにコマンド単独で実行する事をこう呼ぼうかな.

// 履歴
"Ctrl p(↑)"  //一つ前の履歴に遡る
"Ctrl n(↓)"  //一つ後の履歴へ戻す
"Ctrl r"    //履歴を遡ってインクリメンタル検索
    - "Ctrl r"  ひとつ前の検索結果へ移動
    - "Enter"   現在の検索結果をそのまま実行
    - "Esc"      現在の検索結果を表示したままコマンドラインへ戻る
    - "Ctrl g"   検索結果を破棄してプロンプトに戻る

//  中止・リセット系
"Ctrl-c(q)"   // シェル上実行中のプログラムを終了するなど。
"Ctrl-c" をコマンドライン上で入力すると入力中テキストを実行しないで次のラインに行ける
"Ctrl-l"  //clear(画面全消去)と似てるが 現在入力途中は保持
"rset"   //ログイン時と同等に戻す?

// ディレクトリ内容リスト表示
"ls" <オプション> "-l" 詳細  "-a"  隠しファイル "-R" ディレクトリ下も表示
                  "-F" 種類("/"ディレクトリ "*"実行可能ファイル "@"シンボリックリンク)
  "ll = ls -alF" 詳しい. オプションa,l,F混ざってる感じ?
"file ファイル" ファイルの種類などの情報を表示
//  パス・ディレクトリ
"pwd"   現在のパスを出力  "cd" ディレクトリ移動 (指定しないとホームへ)  "cd ../" 親フォルダへ移動
"mkdir"ディレクトリ作成 "rm" ファイル削除  "rm -r"  フォルダ削除(内部含む)
"cp 元ファイル 新ファイル" ファイルコピー "cp-r" フォルダ(の内部も)コピー
"touch ファイル名" ファイルのスタンプ更新.なければ空のファイルを作成.
// パス展開
"." カレントディレクトリ  ".." 親ディレクトリ " ~ " ホームディレクトリ  "/" ルートディレクトリ
"?" 任意の1文字当てはまる候補全部   "*" 任意文字列当てはめる候補全部

// エイリアス (別名の設定)
"alias l=ls"  一時的なエイリアス設定. 削除するにはunalias=エイリアス.
ずっと残すには ~/.bashrcとかに書いてログイン時に読まれるようにして.
"\コマンド" 既存コマンドをエイリアスでオーバーライドした場合に一時的に元のコマンドを呼びたい場合
             バックスラッシュを付ける.
"type コマンド" コマンドの種類を表示。エイリアスかどうかなどが分かる

// リンク
"ln -s file linkName" シンボリックリンクの作成
"ln file linkName"  ハードリンクの作成
"[ハードリンク]" 一つの実体に複数の名前を与える.
          実体が消えるのは全てのハードリンクが消えた時.
"[シンボリックリンク]" ハードリンクと違いディレクトリのリンクが作れたり
            異なるディスク間をまたぐことが出来る.

// 起動と設定
bashでログインした時"/etc/profile"が読み込まれ、//共通設定用のファイル
続いて" ~/.bash_profile"が読み込まれる. //ログイン時にのみ読まれる個人設定
そこから" ~/.bashrc"があればそれも読み込まれる.//bashを起動するたびに読まれる個人設定
個人設定は↑これにだけ書いてれば良さげ.
設定後の繁栄は"bash"でいい。(".bashrc"が読み込まれる.)
// WSL2(Windows Subsystem for Linux 2)のubuntuのbashで確認した細かい話
まず"/etc/profile"から"etc/bash.bashrc"があれば読まれた後に
"etc/profile.d"があればその中の".sh"ファイルが読まれていく.
" ~/bash_profile"とかなければ作ればログイン時に呼ばれるので
そこから1行"bash"とだけ書けばコマンド"bash"が呼ばれて" ~/.bashrc"も呼ばれる.

// 拡張子
".org" 変更前の元のファイルみたいな意味でバックアップしたファイルに付けられがち.(オリジナル)

// パーミッション ・ chmod ( change mode) アクセス権限と設定
-rwxr-xr-x みたいなやつ ls -l などで確認できる
↑一文字目は種類 "-"ファイル(この例) "d"ディレクトリ "l"シンボリックリンク
その後、3文字ごとにファイル所有者権限/所有グループ権限/その他権限
"r"=read(読み取り可能) "w"=write(書き込み可能) "x"=excute(実行可能)
"chmod -オプション 対象  変更  権限" chmodコマンドによるパーミッションの変更の例
  それぞれの項目を一度に複数指定したり、連続設定が可能.オプションは"-R"を指定でサブフォルダを含む.
<対象> "u"ユーザー "g"グループ "o" その他 "a"全て
<変更> "=" 指定した権限に限定する "+" 指定した権限を追加する "-" 指定した権限を除去する
<内容> "r"読み取り "w"書き込み "x"実行 "対象=" 何も指定しないと全ての権限をはく奪.
例) "chmod a=rwx, g-w fileA"
全てのユーザがfileAを読み書き実行できる様にした後、グループの書き込み権は否定.
この他にビットフラグ的な数字で指定する方法もある.

// ディレクトリに対してのパーミッション設定の効果
読み取り = lsなどで表示可能か
書き込み = ディレクトリ内のファイルを変更可能か
実行     = cdなどでそのディレクトリに移動可能か


// ファイルからのコマンド実行(スクリプト)
//ソースコマンド
直接コマンドを打たなくてもコマンドが記述されたファイルを用意して
"sourece ファイル名" か ". ファイル名"(ドットがあることに注意)と打てば実行できる.
これは指定したファイルの内容をそのままコマンドラインに入れるだけの挙動、
つまり読めれば実行できると言うのと既に実行中のシェルで解釈するだけの話なので
ファイルの実行権限は不要.(ファイルにシバンがある場合は無視される)
"source ./ファイル名"の様に"./"を付けてパス指定しないとサーチパスからもファイルを探す.
// シバン(#!)からの実行
ファイルの1行目に
"#!/bin/bash" と書いてあればコマンドライン上で単に
"ファイル名"を打つだけで中のコマンドを実行できる.
    ただしファイルの実行権限が必要。またサーチパス以外の場所にあるなら
"./ファイル名"みたいにしてパスごと渡す必要がある.
"#!"で始まる行はシバン(#ハッシュ,シャープ !バン)と呼ばれるもので
次の行から続くコマンドをどのインタープリタで実行するかを指定する.
"#!/bin/bash"ではバッシュを指定しているのでバッシュに
このファイル自体を引数として渡す事になる。
渡されたバッシュでは#から始まる行はコメントとして無視されるため
再びバッシュを起動する事はなく、続く行のコマンドだけが実行される.
.やsourceコマンドから実行する場合は、今のシェルを利用しているため
エイリアスなどの環境設定がシェルスクリプトにも反映される.
// サーチパス
サーチパスはコマンドを入力した時に実際にコマンド処理をするためのプログラムの置き場所
"echo $PATH"で確認可能.
":"セミコロンを挟む事で複数のパスを登録できる(前方で見つからないと後方を探す).なので
"PATH = $PATH:追加するパス" という変数代入で新たにパスを追加できる.
// ユーザー独自のコマンド
"~/bin"ユーザー独自のコマンドは"~/bin"(home/bin)とかに置くことが多い.

// テキストエディタ
"nano (ファイル名)" お気軽メモ帳. 操作方法が画面下に書いてある. "^C"はCt- "M-"はAltとか
"vim (ファイル名)" 手堅い多機能テキストエディタ. コマンドモードめんどいがマクロとか便利.閲覧も便利

// フィルタ系 (入出力を連携させがち系)
"echo" 入力行を出力
"cat ファイル名" ファイル内容を表示.ファイル名複数入れは連結表示.
cat 単独のコマンドはまとまった文章を入力できCt-dで入力終了するとそれが出力になる(echoに近い)
"cat >> ファイル" 同名ファイルがあると末尾に追記. ">"だと上書きになる.("ca"で追記みたいなエイリアスを設定した方が安全)
"more" 長いファイルでも複数ページで読める.読み終わると閉じる.じっくり読むなら"less"を使うと良い.
"head -n ファイル名" ファイルの頭n行表示(デフォは10行). ファイル名複数入れるとタイトル付きで連続表示.
"tail" headの逆.
"grep" 文字列を検索しヒットした行を表示. 詳しくは[*grepkensaku]
書式は "grep [オプション] <パターン> <ファイル名>
例 "grep ex e" ファイルeからexという文字を含む行を全て表示する.
"sort" 順番に並び替える
"uniq" 重複行を取り除く
"tac" 逆順に出力
"wc" 行数やバイト数を出力: "-l"行数 "-w"単語数 "-c"バイト数
"tr A B" AをBに置換
"diff A B" 差分表示

// パイプ |
"cmd|cmd|cmd|"…みたいに"cmd(コマンド)"を"|"でつなぐと前のコマンドの出力が後ろのコマンドの入力になる
つまり関数(関数(関数))と違い前から順番に実行されていく

// リダイレクト(こちらはパイプと違い関数の引数の様にそのコマンドの入出力を設定する)
"コマンド < ファイル" 標準入力をファイルから読み込む
"コマンド > ファイル" 標準出力を新規ファイルへ書き込む//同名のファイルがあれば削除される
"コマンド >> ファイル" 標準出力を既存ファイルの末尾へ追加する

// less 長文ファイルのread only
"gやG"でファイル先頭や末尾へ移動 "hjkl" 前後左右へ移動
"スペース(PgDn)" [1画面]移動  "w(PgUp)" [1画面]戻る
"d (down)" [半画面]降りる     "u (up)" [半画面] 戻る
細やかなスクロール調整法→ [半画面]や[1画面]の定義を変えられる。
コマンドdやuの直前に数字を入れるとその量が半画面として登録される.

// 検索(lessやvim)
"/"   下方検索(文字列入力開始)
"?"   上方検索(文字列入力開始)
"n"   次の検索結果に移動する
"N"   前の検索結果に移動する

"find <検索開始ディレクトリ><検索条件><アクション>"
検索開始ディレクトリを起点として検索条件に満たすファイルを探し、見つかったらアクションする.
"find 単語" みたいに全部省略してワンワードだけで検索すると
現在のディレクトリから下に向かって単語が一部でも含まれているパスが全て表示される.
<検索条件> "-type f" 通常ファイル "-type d" ディレクトリ  "-type l" シンボリックリンク
検索条件は複数指定できる. "find . -type f -name '*.txt'"
"locate" という簡単だが高速な検索もあるよ(デフォルトでルートからグローバルに検索)
"man -k  キーワード" キーワードからコマンドを検索する
"$PATH"  コマンドを探す場所を表示(普通は複数あるが:で連結)
"which  コマンド" コマンドは複数ある場合、最初に見つかったのを実行するが、
           そのパスを確認する(-aオプで全て表示)
"man man"  //マニュアル。この例はman自身のマニュアルを見てる(セクション番号を忘れた時とかに).
// grep (行検索) [*grepkensaku]
"grep [オプション] <パターン> <ファイル名>" で指定ファイルから特定の行を検索し表示できる
例 "grep ex e" ファイルeからexという文字を含む行を全て表示する.
<オプション> "-n" 行付き "-i"大小文字同一 "-v" 逆にヒットしない行を表示 "-E"拡張正規表現を利用
"-r" サブフォルダとかも再帰的に検索
正規表現を使う場合はシェルによる展開を防ぐために'で囲む
// <正規表現>[*seiki]
// . 任意の1文字
.(ドット)で任意の1文字、つまり何でも良いよという意味になる.
本当に.(ドット)を検索に含めたい場合は
メタ文字をうち消すために直前にバックスラッシュ(\)を置く
例 "grep '\.txt' textes"
// [] 指定文字
[]の中に入れたどれかの文字という意味になる.
例 "[abc]" a,b,cのどれか
"-"ハイフンの利用で連番となる.
例 "[a-z]" aからzまで. "[0-9]" 0から9まで.
// [^ ] 非含有
[^ ]の中に入れた文字以外のいずれかの文字
例 mail[^13] mailの後に1か3以外の文字があればヒット.(1文字なので十三ではない)
// 行頭・行末 ^ $
^が先頭限定, $が行末限定という意味
例 ^sentou   // 先頭がsentouの場合のみ一致
    matu$    // 行末がmatuの場合のみ一致
   ^$        // 空行に一致
// 繰り返し
* 直前の文字が繰り返されている様なパターンに一致.ただし直前の文字がない時も一致となる
直前の文字はメタ文字でもいいので.(ドット)と組み合わせると任意の文字列となる.
例 .*  //任意の文字列
    ^ex.*txt$  //exで始まってtxtで終わる行
// 拡張正規表現 () |
拡張正規表現を使う場合は-Eオプションが必要.
|は複数の正規表現をor条件でつなぐ.
例 abc|xyz //abc または xyz という文字列にマッチ
()によるグループ化と組み合わせて例えば
My (Vodka|Wine) と書くとMy VodkaまたはMy Wineでマッチとなる
例 "grep -E 'My (Vodka|Wine)' drink.txt"

// bashのブレース展開
touch file-{1..5}.txt  という感じで
"{A..Z}"みたいにして数字やアルファベットが連番リスト化する
"{a,b,c}"みたいに普通に連記しても良い

//変数
"x=数字"  みたいに =で結ぶだけで特定のワードを変数化できる(スペースはいれない)
"echo $x"  みたいに書くと変数の内容を参照する. ($を付けないと普通の文字としてのxなのでその他のシステムと競合しない)

// 外部コマンドと組み込みコマンド
シェル自体に内蔵しているコマンドを"組み込みコマンド",
ファイルシステム上に存在するコマンドを"外部コマンド"と呼ぶ.
外部コマンドは現在設定されているシェル変数を参照できない.
外部コマンドがシェル変数を参照できるようにするには
"export シェル変数" でシェル変数を環境変数として設定する必要がある.
"export シェル変数=シェル変数の値" みたいにシェル変数のセットと同時に可能.

// シェル変数
 ビルトインコマンドからしか参照されない.
通常の変数の様に "echo $変数" で参照したり "変数=" で設定できる.
"PS1" プロンプトのデフォルト表示
"PS1='\W ******** ' " [カレントディレクトリ *********]みたいなプロンプト設定例
"HISTSIZE"  コマンドライン履歴の最大行数
"HISTFILE" コマンドライン履歴を保存するファイル名。デフォルト値は "~/.bash_history"
"HISTFLIESIZE"  履歴ファイルに保存するコマンドライン履歴の最大行数
"HOME"   ホームディレクトリ
"SHELL"    ログインシェルのパス
"PWD"  カレントディレクトリ
//環境変数  外部コマンドからも参照できる
シェル変数の内、環境変数として設定してあれば外部コマンドからも参照できる.
"printenv"コマンドで現在設定されている環境変数を表示できる
"PATH" サーチパス:シェルからコマンドを実行する際にコマンドの実体ファイルを探すディレクトリ
"IFS"  (Internal Field Separator) bashが単語の区切りとして解釈する文字
"LANG" 現在のロケール(言葉や国を特定する識別子)

// shoptによるバッシュの設定
"shopt[動作][設定項目]" 動作はshoptコマンドのオプションとして、設定項目は引数として記述する体裁ぽ.
(例)"shopt -s autocd"
[動作] "s"(設定)を有効にする"u"無効にする"o"set-oで指定できるオプションを対象にする.
[設定] 例
autocd    ディレクトリ名のみでcdコマンドを実行する
cdspell   cdコマンドで指定したディレクトリの軽微なミスを修正して実行する
dirspell  指定したディレクトリが存在しない場合、補完の際に訂正を試みる

// sed(stream editor)
"sed 対象行 コマンド ファイル" みたいな書式
拡張正規表現を使う場合は"-r"オプを付ける.
"sed 1d FILE" FILEの1行目を削除
"sed 2,5d FILE" FILEの2行目から5行目を削除
"sed d FILE" FILEの全行削除
正規表現で対象を指定する場合/で囲む
"sed/^B/d FILE" 先頭がBで始まる行を削除
"p"単に行を表示する"sed -n 1p FILE" FILEの1行目を表示
sedコマンドは仕様上,全行出力してしまうので
"-n"オプでファイルの全出力を避ける事で"p"の意図した挙動になる.
"s"置換.書式は"s/対象/置換後/フラグ"
"sed -n 's/abc//gp' FILE" 置換文字列に何を指定しないので削除となる.
正規表現を使う場合に備えて"'"で囲んである.
フラグはgで全ての対象を置き換えでpは対象の出力
// awk
"awk スクリプト ファイル" で指定ファイルにスクリプトを適用する。
スクリプトの働きはファイルの各行に1行づつ何かしらの処理(アクション)をする.
スクリプトはファイルに保存しておけばファイル名指定するだけ.
スクリプトの中身は"パターン アクション"からなる。
パターンを省略した場合は全ての行にアクションが適用される.

// シェルスクリプト ・シェル文法
コマンドの様にシェルに直接打ち込んでも良いシェルの文法。
主にまとまった量のコマンドや分岐をファイルから実行する目的で記述する。
";" これを書くと改行しなくてもコマンドの終端を表せるので1行に複数のコマンドを書ける.
"\(バクスラ)"  次に来る記号の特殊効果を消す効果がある。
        ゆえに改行直前に打てば(見た目は改行しながらも)シェル解釈時には改行が無視される.
        (可読性を重視した改行ができる。)
"|"パイプでコマンドを繋いだ後は普通に開業しても良い.
"#" これを書いたら、その行はそれ以降コメント扱いとなる.
"x=3" 変数への代入はスペースを挟まず"="で繋げばできる.
"$変数" 変数を参照するには直前に"$"を付ける. じゃないと普通の文字と解釈さる.
 変数名はアルファベットと数値と_の組み合わせで付けられるが先頭に数値はだめ.
"文字${変数}文字" {}で囲むと前後に文字があってもそこが一つの変数だと認識可能になる.
'や"で"囲むことでファイル名などの文字途中にスペースやワイルドカードなどが混ざっても
普通にみたままの文字列として使用可能になる.
'シングルクォート'の中では$も普通の文字となり変数展開されなくなるが
"Wクォーク"の中では$が生きて変数展開される.
"\"バクスラ"置いて次の文字の特殊さをエスケープする事でWクォーク内でも
      変数展開を避ける事は可能。
"$(コマンド)" コマンド置換 : 実行時、()内に入れたコマンドの結果に置き換わる.
" 変数=$(コマンド)"という風にして変数にコマンド結果を入れたりできる.
"`バッククォート`"で囲んでも$()と同じ効果.
"$0" シェルスクリプトの名前(ファイル名)に置き換わる
"$1~" $1からはシェルスクリプト実行時に渡した引数が順に入り置き換わる.
"$#" 引数の個数 "$@ or $*" 全引数. ""で囲むと@は個々の引数が*は全引数がまとめて囲まれる.
"if"文の例  // [ ] の前後などにスペースが必要.(ifの後にも[の中にも)
if [ "$1" = "bin" ]; then //ifの後にはコマンドを置いてもいい(各コマンドは値を返す)
   echo "OK"
else
    echo *NG"
fi
if []の中の条件式で仕える評価演算子
"=" "!=" "-n str" strが空文字列でない "-z str" strが空文字列である
// 整数の評価 (小数は不可)
"int1 -eq int2" 等しい "-ne" 等しくない "-lt" <の意味  "le" <= の意味
"-gt" >の意味  "-ge" >=の意味
// ファイル属性に関する評価演算子
"-e file" fileが存在する "-d " ディレクトリである. "-h "シンボリックリンク
"-f " 通常のファイル " -r""-w""-x" 各パーミッションあり "A -nt B"Aの変更時刻がBより新しい
"A -ot B" Aの変更時刻がBより古い
// 結合演算子(条件式に対して働く)
"A -a B" and(AとBが共に真の場合に真) "A -o B" or "!" 真偽反転 "()" グループ化(\backSlash必要)
"コマンドA && コマンドB" コマンドAが正常終了(0を返す)場合にコマンドBを実行
"コマンドA || コマンドB" コマンドAが異常終了(0以外を返す)場合にコマンドBを実行
"if[ 条件] && [条件 ] && [条件]" 各条件が全て真なら次へ(条件はコマンドでもいい)
"if[条件] || [条件 ] || [条件]" どれかの条件を満たすなら次へ
// 終了ステータス (コマンドの戻り値)
" echo $?" で確認できる.
自作のスクリプトも終了ステータスを戻す
特に指定しなければスクリプト内で最後に実行したコマンドの
終了ステータスが戻る.
指定するには
"exit 終了ステータス"
// for文
for "変数名" in "リストA リストB リストC …"
do
  繰り返し処理
done

繰り返し処理の中ではfor一行目で定義した"変数名"を
使う事ができるが、その変数の内容としては同じくfor一行目で定義した
"リスト"が順番に展開される.
"リスト"には*.txtみたいにパス名展開が利用できるんで
単に in *.txt みたいに書いておけばカレントディレクトリ内の
.txt系ファイルに次々と展開されていく.
   //seq
for文内、リストとしてコマンド置換を使う事ができる.
例えばseqというコマンドは
"seq 2 4" みたいに書くと 2 3 4が改行しながら出力されるだけの機能だが
リストに指定すればC言語とかのfor(int i=2; i <=4; ++i)みたいに使える.
---0001.txtから0005.txtまでのファイルを作る例---
for i in $(seq 1 5)
do
    touch"000${i}.txt"
done
// デフォルトのリストはコマンドライン引数となる
"$@"というリストを(""含めて)指定すると"コマンドライン引数"がリストになる.
ただし、in以下リストを省略すると自動でそれになる.
for param in "$@"と書いても単にfor paramと書いても同じ。
// case文
case文 は指定された文字列が指定するパターンにマッチする場合に実行する
どこかのパターンにマッチした時点で次のマッチングは行われない.
複数条件のどれかでいい場合は複数のパターンを|で区切る.
case 文字列 in
     パターン1)
      処理1
       ;;
     パターン2)
     処理2
      ;;
esac

コマンドライン引数の拡張子によって起動するプログラムを変える例
#! /bin/bash

case "$1" in
 *.txt)
    less "$1"
     ;;
    *)
      echo "not supported file : $1"
      ;;
esac
// While 文
指定した条件が真である限り繰り返す処理
while <コマンド>
do
   繰り返す処理
done
   //10以下の奇数を表示する例
#!/bin/bash
i =1
while [ "$i" -le 10]
do
    echo "$i"
    i=$((i+2)) #算術式展開
done
// 算術式展開
"$((式))"という風に$(())2重括弧の中で書いた式において
文字列を計算式として扱える。括弧の中ではシェル変数に$を付けなくてよい.
// シェル関数 (呼び出す前に定義する)
function <関数名> ()   #functionと()のどちらかは省略できる.

{
  処理
}
関数内での引数は、普通に関数の引数でありコマンドライン引数ではない.
($0はシェルスクリプト名のまま)
戻り値は最後に実行されたコマンドの終了ステータスだが
return 数値 という風に明示的に指定も可能.
関数内で"local"を付けて定義した変数は関数内部専用の変数になる.

// ヒアドキュメント (複数行テキスト)
シェルスクリプト内で複数行のテキストを記述する場合
コマンド << "終了文字"
テキスト
・・・
"終了文字"
みたいにすればよい.
例)
cat << END
abcd
efg
END

// アーカイブ
"tar cf dirA.tar dirA"  dirAディレクトリを「dirA.tar」という名前でアーカイブ
tarのオプションは-不要で"c"はcreate. "f"はfileの意味でファイル名を引数に取る時に必要.
"tar tf dirA.tar" でアーカイブdirA.tarの中身(構成)を確認."t"はリストの意味.
"tar xf dirA.tar" dirA.tarを展開. "x"はextractの意味. 同名ファイルがあれば上書きされる.
// 圧縮 :基本的に高圧縮な形式程時間は掛かる
"gzip ファイル" ファイルを圧縮. 圧縮後,ファイル名には.gzが付く.
"gzip -d ファイル.gz" or "gunzip ファイル.gz" ファイルを解凍(gzは取れる)
gzipコマンドは一つのファイルが対象なので複数の場合はアーカイブにしとく必要があるが
tarの"z"オプションを使うとgzipを使って圧縮や解凍までしてくれる.
"tar czf dirA.tar.gz dirA" dirAをdirA.tar.gzという名前でアーカイブ圧縮する.
"tar xzf dirA.tar.gz" dirA.tar.gzという圧縮アーカイブを解凍展開.
bzip2コマンドはgzipと同じ体裁でより圧縮可能なbzip2形式で圧縮
解凍は"bzip2 -d ファイル"または "bunzip ファイル"
これもまたtarから"j"オプションで利用可能. (例)"tar cjf 名前"
xz形式はさらに圧縮率が高く.tarでは"J"オプションで利用可能."tar cJf 名前"
// zip形式 (windosやmacで良く利用される)
"zip -r dirAzip dirA"という感じで.-rは再帰の意味でフォルダ事中身全部になる.
"zipinfo dirA" で中身確認  "zip -er …"という風に"e"オプションでパスワード付きzip化.
"unzip dirA.zip"で解凍
コマンドがインストールされてなければubuntuでは
"sudo apt-get install zip unzip" でインストールできる.

// Git  バージョン管理システム
"git config --global …"初期設定:ユーザー情報などが~/.gitconfigに置かれる.
"git init" 初期化.カレントに.gitディレクトリ(リポジトリの実体)が生成される.
"リポジトリ" Gitがファイルの履歴を保存している場所:テキストではなく独自形式
"ワークツリー" リポジトリの内容をファイルとして展開する場所.サブフォルダにリポジトリを持つ.
"git add ファイル" ファイルをリポジトリの履歴に残す"インデックス"に登録.commitする前に毎回やる.
     add -u  変更したファイルを全てをインデックスに登録(新規作成ファイルは除く)
     -A  新規作成したファイルも対象にするのが-uと違うところ.
"git commit -m 'ファイル新規作成'"
 事前にインデックスにaddしたファイルを対象に一括でリポジトリに変更履歴を追加.
"-m"オプションで'コメント'を残せる."git commit"する事を"コミットする"と言う.
"リビジョン" "コミット" ある時点でのプロジェクトの状態の事.
"git status" 現在のワークツリーの状態を表示する(変更があったファイル名など)
"git diff" 現在のワークツリーにおいて、過去の履歴との差分表示.
"git status" ワークツリーの状態を表示する
"git log"   履歴を表示する
"git checkout HEAD" ワークツリーとインデックスがリポジトリと同じになる
                     最後にコミットした状態まで戻ると言う事かと
"git revert <取り消したいコミットのオブジェクト名>" コミットを取り消す
             新しいコミット内容に修正するコミットをする事になるらしい

"ブランチ"  枝分かれしたそれぞれの履歴
"git branch" ブランチ一覧を表示する
"master"  デフォルトのブランチ. (通常メインのブランチとして使われる)
"git branch 名前" 新しいブランチを作る
"git checkout ブランチ名" ブランチを切り替える
"git merge ブランチ名" 指定したブランチを現在のブランチにマージする
"git branch -d ブランチ名" ブランチを削除する.未マージのブランチは"-D"で削除可能.
// リポジトリのバックアップ
リポジトリ自体のバックアップは
まず別のパスに新規ディレクトリ(慣習的に名前.git)を用意し
そこで"git --bare init"でバックアップ用のリポジトリ初期化して元の場へ戻り
"git push <送信先リポジトリ> <送信元ブランチ>:<送信先ブランチ>"でバックアップ.
           送信元ブランチと送信先ブランチが同じなら一つ書けば良い
"git clone 復元元リポジトリ" リポジトリを復元
"git remote add 別名 パス"でリポジトリパスを別名で登録
"git remote -v" 別名の一覧を表示
"git fetch リポジトリ" 他のリポジトリの履歴を取得しリモート追跡ブランチに保存
「リモート追跡ブランチ」 上流(共有)リポジトリの内容を取り込むためのブランチで
 リモート名/ブランチ名で自動生成される.これを自分のリポジトリにマージすればOK.
"git branch -r" リモート追跡ブランチを表示する
"git pull オリジン マスター" オリジンをマスターにマージ."fetch"と"merge"を一度に行う.
// ソフトウェアを配布しているサイトも「リポジトリ」と言う
「パッケージ」ソフトウェアの実行ファイル・ドキュメント・設定ファイルなどをアーカイブしたもの.
パッケージファイルの形式には "rpm" Red Hat形式 "deb" Debian形式 などがある
"deb"はUbuntu,Debian  "rpm"はCentOS, Red Hat などで採用されている。
公式リポジトリ:各ディストリビューション一式などが配布されているとこ
サードパーティリポジトリ:UbuntuならPPA,Japanesei Teamなど
"dpkg" debファイルのインストールに使われる事が多かった.
// apt-get オプション コマンド パッケージ名"
dpkgと違い依存性解決のインストールも自動で行ってくれる
"sudo apt-get install パッケージ名" パッケージのインストール
"sudo apt-get remove パッケージ名" パッケージのアンインストール(依存ファイルも消す)
             "-y" 確認しない
"sudo apt-get purge パッケージ名"  設定ファイルも含めた完全アンインストール
"apt-cache search 検索ワード" ネットワークから検索ワードでソフト類を探す
             "--name-only"  パッケージ名だけを検索対象にする
"apt-cach show パッケージ名" 詳細の表示
// SSH (Secure Shell) リモートマシンと通信するためのプロトコル
認証・暗号化の機能を持つためセキュリティを確保して接続できる.通常TCPの22番ポートを利用
"PuTTY" "Tera Term" windowsのSSHクライアント機能を持つターミナルエミュレータ
"ssh ログインユーザー名@宛先IPアドレス" sshコマンドによるリモートログイン
遠隔地とは 公開鍵認証によるユーザーの認証が必要だったり
// VirtualBoxとssh接続
"NAT" Network Address Translation プライベートIPアドレスを自動的に
    外部ネットワークで使用できるグローバルIPアドレスに変換する機能
"ポートフォワーディング" ホストOSからNATが効いている仮想OSのマシンへ接続するために
                         ポート番号を設定する

// プロセスとジョブ
「プロセス」 Linuxカーネルから見た処理単位
"ps" 現行プロセスの表示
   "PID" プロセスID "CMD"実行されているコマンド
   "TTY" ターミナル: ターミナルに接続していないデーモンは"?"表示
"ps xf" xオプは別のターミナルやデーモンも含めて現在のユーザーが実行中のを全部表示
        fオプは親子関係を表示
        aオプはLinuxシステム自体を管理するために動いているプロセスを表示
    uオプはCPU,メモリ占有など含めた詳細表示
「ジョブ」 シェルから見た処理の単位.コマンドラインの一つの行
           パイプで繋いだコマンドはプロセスはコマンドごとに生成されるが
      ジョブはコマンドライン全体で一つとなる.
  プロセスはシステム全体で一意のIDを持つが
 ジョブはシェルごとにジョブ番号を持つ.
"Ct-z"  コマンド途中停止=ジョブの一時停止
vimでノーマルモード中の場合もコマンドラインへ戻れる.GVIMならタスクバーへ収納
"jobs"  ジョブの一覧表示 "-l"プロセスIDも表示
"fg %ジョブ番号" ジョブをフォアグランド(アクティブ)にする.
"fg" 無印は"jobs"で+マークが付いているジョブをフォアグランドする
[バックグラウンド] ユーザーが対話的に操作できない状態のジョブの状態
    "Ct-z"するとジョブは一時停止になってしまうが"bg"は実行中のジョブを止めない
[フォアグランド] ユーザーが対話的に操作できる状態のジョブの状態(カレントジョブ)
"bg %ジョブ番号"  指定番号のジョブをバックグラウンドにする
"bg" カレントジョブをバックグラウンドにする.
"コマンド (引数) & " コマンド行の末尾に&を入れると初めからバックグラウンドで処理をする
" Ct-c" フォアグランドジョブの終了
"kill %ジョブ番号" バックグラウンドジョブの終了
"kill プロセスID"  プロセスを終了させる
killコマンドは直接プロセスを終了させると言うよりLinuxカーネルに
[シグナル]を送っている.無印の場合"Kill -TERM ID"みたいにTERMシグナルを送っている.
"kill -l" 利用可能なシグナル一覧を表示 "SIG"はシグナルに付く接頭辞.
終了処理があるのでユーザーは普通SIGKILLは指定しない.カーネルによる強制終了などで使われる.


// ヘルプ マニュアル
"コマンド --help" コマンドのオプションとして概要を表示させる.
"man コマンド" コマンドのマニュアル "man 番号 コマンド" セクション番号指定で調べる
"man man" manコマンドのマニュアル :セクション番号の説明とか
"man bash" バッシュ自体のマニュアル
"man -k キーワード" キーワードからマニュアルを探す


// info コマンド 最近のHelpシステム
"info コマンド" でコマンドを調べられる.無印で総合案内みたいなページ<dir>が開く.
<ノード> info系ドキュメントにおける項とか章みたいな単位.(ページと言うと画面単位みたいなので微妙)
         ノードは階層を持ち、一つの階層に複数のノードがあったり、その下にさらにノードがあったりする.
<top> 通常のinfoドキュメントにおける一番上のノード.さらに上にdirがある
<dir> 最上ノードに存在するinfoの総合案内的ページ
<Next> 次のノード(兄弟ノード,同階層ノード) <Up> 上のノード(親ノード,上階層)
"u" 上のノードへ "n" 同階層の次のノードへ "p" 兄弟間で前のノードへ
"]" 階層無関係に次のノードへ(末っ子なら親の弟へ ) "["階層無関係にノードを戻る
"Ct-v" 一画面下へ  "スペース" 一画面下へ行き、下端なら次のノードへ行く  
"At-V" 一画面上へ  "Back" "Dell" 一画面上へ行き、上端なら前のノードへ戻る
"t" Go to the top node of this document."d" Go to the main 'directory'node.<dir>
"Ct-n"  次の行に移動 "Ct-p"前の行へ "Ct-f" 一文字進む "Ct-b" 一文字戻る
"Ct-a" 行頭に移動 "Ct-e" 行末へ移動
"Tab" 次のリンクへカーソル移動  "Meta Tab(Shift TabとかAlt Tabとか環境依存)" 前のリンクへカーソル移動
"*"リンク "Enter" リンク先へ移動 "l" ノードの移動履歴を戻る


0 件のコメント: